#ifndef LIFEMANAGEWINDOW_H
#define LIFEMANAGEWINDOW_H

#include <QMainWindow>
#include "ui_lifemanagewindow.h"
#include <QWidget>
#include <vector>
#include <functional>
#include <QMessageBox>
#include <QStandardItemModel>
#include <QModelIndex>
#include "LoadManager.h"
//tableview里各列的列号
#define ComponentName_Column 0
#define InstanceName_Column 1
//#define HasUI_Column 2
#define InstanceState_Column 2

enum LoadType{
	SerLoadType=0,
	ViewLoadType=1
};
//使QVariant能够支持自定义枚举类型
Q_DECLARE_METATYPE(LoadType)
class LifeManageWindow : public QMainWindow
{
	Q_OBJECT

public:
	LifeManageWindow(QWidget *parent = 0);
	~LifeManageWindow();
	void setData(const vector<SerLoad>& vecSerLoad,const vector<ViewLoad>& vecViewLoad,const QMap<QString,ILoadManager*>& mILoadManagerMap);//设置要显示的数据
private:
	Ui::LifeManageWindow ui;
	vector<SerLoad> mSerLoadData;
	vector<ViewLoad> mViewLoadData;
	QMap<QString,ILoadManager*> mILoadManager;//键是组件名，值是该组件对应的实例集合的指针
	QStandardItemModel* mModel;//tableview显示的数据模型
private slots:
	void btnInit_clicked();
	void btnUnLoad_clicked();
	void btnLoad_clicked();
	void btnActive_clicked();
	void btnUnActive_clicked();
private:
	//检查是否满足执行条件，是则返回true，否则返回false
	//row 用户在tablewidget界面上选中的行的索引
	//conditionState 执行操作前允许组件所处的状态，多个状态之间要用/分割
	//opera 要对组件执行的操作
	bool checkState(int row,const QString& conditionState,const QString& opera);
	QStandardItemModel* getModel();
	QVector<int> getSelectedRows();
};

#endif // LIFEMANAGEWINDOW_H